package br.kanban.core.busines;

import java.io.Serializable;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.TypedQuery;

import br.kanban.core.persistence.Usuario;

@Stateless
public class UsuarioBO extends GenericBO<Usuario> implements Serializable{

	private static final long serialVersionUID = 1L;

	public String gerarNovaSenha(Usuario usuario){
		StringBuilder sb = new StringBuilder(12);
		for(int i = 0; i<10; i++){
			sb.append( (char) ((char) 33 + (Math.random() * 93)) );
		}
		
		usuario.setSenha(sb.toString());
		return sb.toString();
	}

	@Override
	public List<Usuario> pesquisar(Usuario filtro) {
		StringBuilder sb = new StringBuilder("from Usuario where 1=1");
		
		if(filtro.getNome() != null && !filtro.getNome().isEmpty())
			sb.append(" and upper(nome) like :nome");
		if(filtro.getEmail() != null && !filtro.getEmail().isEmpty())
			sb.append(" and upper(email) like :email");
		
		TypedQuery<Usuario> qr = getEm().createQuery(sb.toString(), Usuario.class);
		
		if(filtro.getNome() != null && !filtro.getNome().isEmpty())
			qr.setParameter("nome", "%" + filtro.getNome().toUpperCase() + "%");
		if(filtro.getEmail() != null && !filtro.getEmail().isEmpty())
			qr.setParameter("email", "%" + filtro.getEmail().toUpperCase() + "%");
		
		return qr.getResultList();
	}
	
	public Usuario pesquisar(String user) {
		List<Usuario> lista = getEm().createQuery("from Usuario where upper(login) = :nome", Usuario.class)
				.setParameter("nome", user.toUpperCase()).getResultList(); 
		
		return lista.isEmpty()?null: lista.get(0);
	}
	
	public boolean isUniqueLogin(String login){
		return getEm().createQuery("from Usuario where login = :login")
					.setParameter("login", login)
					.getResultList().size() <= 0;
	}
	
}
